Читать онлайн книгу "Программирование на Python3 с PyQt5"

Программирование на Python3 с PyQt5
Сергей Николаевич Талипов


Основы программирования на Python3 с визуальными компонентами PyQt5 (для PyCharm Community).





Сергей Талипов

Программирование на Python3 с PyQt5





ЛЕКЦИЯ 1 – УСТАНОВКА PYTHON, БИБЛИОТЕК И IDE





1.1 Установка Python3














































C:\Python35\

C:\Python35\Scripts\




1.2 Установка в Python библиотек Qt5, Spyder3 и других модулей











pip install PyQt5

pip install PyQt5-tools

pip install spyder



pip install pyperclip

pip install requests

pip install html2text

pip install beautifulsoup4

pip install wget

pip install python-docx

pip install XlsxWriter

pip install openpyxl

pip install Pillow

pip install selenium

pip install wheel

pip install pyinstaller

pip install pypiwin32

pip install pywin32-ctypes








1.3 Запуск стандартной графической оболочки IDLE




IDLE.bat:

@start /b C:\Python35\pythonw.exe "C:\Python35\Lib\idlelib\idle.pyw"






1.4 Запуск графической оболочки Spyder3




Spyder3.bat

@start /b C:\Python35\Scripts\spyder3.exe


















1.5 Использование сторонней IDE PyCharm




JetBrains32.bat:

@start /b C:\PyCharm2018\bin\pycharm.exe



JetBrains64.bat:

@start /b C:\PyCharm2018\bin\pycharm64.exe












1.5.1 Настройка в PyCharm мастера для создания QtForm
















Form







0

0

640

480







Form






















1.5.2 Настройка для вызова внешнего редактора QtForm










C:\Python35\Lib\site-packages\pyqt5-tools\designer.exe

"$FilePath$"

$FileDir$


















1.6 Компиляция в exe-файл




Чтобы перенести программу на другой компьютер, где не установлен Python, её нужно скомпилировать в .exe файл. Для этого есть несколько способов, и сегодня мы рассмотрим наиболее простой – библиотеку pyinstaller



Дадим в командной строке две команды:



pip install wheel

pip install pyinstaller

pip install pypiwin32

pip install pywin32-ctypes



Допустим, мы имеем .py файл под названием 1.py, который успешно запускается и работает в качестве скрипта Python. И теперь мы хотим сделать из него .exe файл, чтобы мы могли просто дать его другу, и не переживать об установке питона и модулей на другом компьютере.



Положим наш скрипт на диск D: далее откроем командную строку и введем следующие команды





D:

pyinstaller –onedir –onefile –name=myprogram "D:\1.py" –paths C:\Python35\Lib\site-packages\PyQt5\Qt\bin





Через некоторое время компиляция завершится и в подкаталоге dist появится EXE-шник



Некоторые ключи для компиляции:



--onefile – сборка в один файл, т.е. файлы .dll не пишутся

–-windowed -при запуске приложения, будет появляться консоль

–-noconsole – при запуске приложения, консоль появляться не будет

–-icon=app.ico – добавляем иконку в окно

–-paths – возможность вручную прописать путь к необходимым файлам, если pyinstaller

не может их найти (например: –paths C:\Python35\Lib\site-packages\PyQt5\Qt\bin)






1.7 Если поломался Python и не работает pip, spyder3 или pyinstaller




cmd

python -m pip install pip==9.0.1

pip uninstall spyder

pip install spyder

pip uninstall pyinstaller

pip install pyinstaller






1.8 Установка PyQt5 в Linux




sudo apt-get install qt5-default

sudo apt-get install qtcreator






ЛЕКЦИЯ 2 – ОСНОВНЫЕ ТИПЫ ДАННЫХ, УСЛОВИЯ И ОПЕРАЦИИ



К неизменяемым (immutable) типам относятся: целые числа (int),  числа с плавающей точкой (float), комплексные числа (complex), логические переменные (bool), кортежи (tuple), строки (str) и неизменяемые множества (frozen set).

К изменяемым (mutable) типам относятся: списки (list), множества (set), словари (dict).




2.1 Числовые и строковые переменные


Целые числа могут быть любой длины, они ограничиваются лишь доступной памятью.

Числа с плавающей запятой имеют ограниченную точность. Визуально разницу между целым числом и числом с плавающей запятой можно заметить в консоли по наличию точки: 1 – целое число, 1.0 – с плавающей запятой.

Комплексные числа записываются в форме x+yj, где x – действительная часть числа, а y – мнимая: c = 1+2j

Мы можем преобразовывать значения из одного типа в другой с помощью таких функций, как int(), float(), str().

Строка представляет собой последовательность символов. Можно использовать одинарные или двойные кавычки для создания строки.



# Это комментарий



box1 = 15

box2 = 25

box3 = box1 + box2

print(box3)

s1 = 'Вам: '

s2 = ' лет'

name = input('Введите ваше имя: ')

age = input('Введите сколько вам лет: ')

name = 'Вас зовут: ' + name

age2 = s1 + age + s2

print(name)

print(age2)

b = 100 – int(age)

f = 100.5 – float(age)

print('Вам осталось жить где-то: ' + str(b))

print('А точнее где-то: ' + str(f))



40

Введите ваше имя: tsn

Введите сколько вам лет: 43

Вас зовут: tsn

Вам: 43 лет

Вам осталось жить где-то: 57

А точнее где-то: 57.5



Список использованных команд:

• print('Какой то текст') – печатает текст;

• print(a) – печатает значение переменной a (вместо a может быть любое имя переменной);

• a=input('Пояснение что надо ввести') – ожидает от пользователя ввода какого то значения и помещает его в переменную с типом строка (вместо a может быть любое имя переменной);

• int(a) – преобразовывает переменную типа строка в число (вместо a может быть любое имя переменной);

• str(i) – преобразовывает переменную числового типа в строку (вместо i может быть любое имя переменной).

2.1.1 Встроенные функции

Язык Python включает много уже определенных, т. е. встроенных в него, функций. Программист не видит их определений, они скрыты в "недрах" языка. Достаточно знать, что эти функции принимают и что возвращают, то есть их интерфейс.

Ряд встроенных функций, касающихся ввода-вывода и типов данных, мы уже использовали. Это print(), input(), int(), float(), str(). Рассмотрим другие встроенные функции:

print(ord('z')) # Код символа: 122

print(ord('ф')) # 1092



print(chr(87)) # Символ по коду: W

print(chr(10045)) # ?



print(len('abc')) # Длина строки: 3

print(abs(-2.2)) # Модуль числа: 2.2



a = 10 / 3 # Вещественное деление: 3.3333333333333335

b = 10 % 3 # Остаток от целочисленного деления: 1

c = 10 // 3 # Деление нацело. Целая часть при делении: 3



print(a) # 3.3333333333333335

print(b) # 1

print(c) # 3



print(round(a, 2)) # Округление для двух знаков: 3.33

print(round(a)) # Округление до целого числа: 3



print("Number: %.2f" % a) # Number: 3.33



print(divmod(10, 3)) # Целая часть и остаток при целочисленном делении: (3, 1)



print(pow(2, 4)) # 2 в степени 4: 16

print(max(10, 12, 3)) # Макимальное число в списке: 12

print(min(10, 12, 3, 9)) # Манимальное число в списке: 3

print(sum((10, 12, 3, 10))) # Сумма чисел в списке: 35



2.1.2 Собственные функции

Иногда, набор каких-то повторяющихся команд нужно выполнять несколько раз. Такие блоки команд обычно выносят в отдельные кусочки программы. Именно из функций состоят внешние модули, которые можно подключать к программам. У функции могут быть входные параметры, называемые аргументами – это одна или несколько переменных, которые пишутся в скобках после имени функции. Также функция может возвращать одно или несколько значений с помощью команды return. Объявление функции начинается с ключевого слова def, далее следует имя функции, аргументы в скобках, и программный код отделённый четырьмя пробелами.



def pribavka(zarplata, avto):

k = 0

if (avto > 10):

k = round((avto – 10) * 0.02 * zarplata)

return k



a = int(input('Введите зарплату сотрудника: '))

b = int(input('Введите количество автомобилей проданных за месяц: '))

c = pribavka(a, b)

print('В этом месяце прибавка к зарплате составит: ' + str(c))



2.1.3 Функции математического модуля math

math.acos(X) – арккосинус X. В радианах

math.acosh(X) – вычисляет обратный гиперболический косинус

math.asin(X) – арксинус X. В радианах

math.asinh(X) – вычисляет обратный гиперболический синус

math.atan(X) – арктангенс X. В радианах

math.atan2(Y, X) – арктангенс Y/X. В радианах. С учетом четверти, в которой находится точка (X, Y)

math.atanh(X) – вычисляет обратный гиперболический тангенс

math.ceil(X) – округление до ближайшего большего числа

math.copysign(X, Y) – возвращает число, имеющее модуль такой же, как и у числа X, а знак – как у числа Y

math.cos(X) – косинус X (X указывается в радианах)

math.cosh(X) – вычисляет гиперболический косинус

math.degrees(X) – конвертирует радианы в градусы

math.e – e = 2,718281…

math.erf(X) – функция ошибок

math.erfc(X) – дополнительная функция ошибок (1 – math.erf(X))

math.exp(X) – eX

math.expm1(X) – eX – 1. При X ? 0 точнее, чем math.exp(X)-1

math.fabs(X) – модуль X

math.factorial(X) – факториал числа X

math.floor(X) – округление вниз

math.fmod(X, Y) – остаток от деления X на Y

math.frexp(X) – возвращает мантиссу и экспоненту числа

math.fsum(последовательность) – сумма всех членов последовательности. Эквивалент встроенной функции sum(), но math.fsum() более точна для чисел с плавающей точкой

math.gamma(X) – гамма-функция X

math.hypot(X, Y) – вычисляет гипотенузу треугольника с катетами X и Y (math.sqrt(x * x + y * y))

math.isfinite(X) – является ли X числом

math.isinf(X) – является ли X бесконечностью

math.isnan(X) – является ли X NaN (Not a Number – не число)

math.ldexp(X, I) – X * 2i. Функция, обратная функции math.frexp()

math.lgamma(X) – натуральный логарифм гамма-функции X

math.log(X, [base]) – логарифм X по основанию base. Если base не указан, вычисляется натуральный логарифм

math.log10(X) – логарифм X по основанию 10

math.log1p(X) – натуральный логарифм (1 + X). При X ? 0 точнее, чем math.log(1+X)

math.log2(X) – логарифм X по основанию 2

math.modf(X) – возвращает дробную и целую часть числа X. Оба числа имеют тот же знак, что и X

math.pi – pi = 3,1415926…

math.pow(X, Y) – XY

math.radians(X) – конвертирует градусы в радианы

math.sin(X) – синус X (X указывается в радианах)

math.sinh(X) – вычисляет гиперболический синус

math.sqrt(X) – квадратный корень из X

math.tan(X) – тангенс X (X указывается в радианах)

math.tanh(X) – вычисляет гиперболический тангенс

math.trunc(X) – усекает значение X до целого

import math



print(math.sin(22))



-0.008851309290403876





2.1.4 Функции и методы строк











2.2 Условный оператор




sun = input('Введите 1 если погода солнечная, и 2 если пасмурная: ')

if sun == '1':

d = 'Нужно загорать'

else:

d = 'Загорать не выйдет'

print(d)



myname = input('Введите логин: ')

mypass = input('Введите пароль: ')

if ((myname == 'tsn') and (mypass == 'superpassword123')) or ((myname == 'boss') and (mypass == '777')):

print('Привет, ' + myname + '. Добро пожаловать!')

else:

print('Ты хто такой, тавай дасвидания…')



v = int(input('Введите сколько вам лет: '))

if (v < 18):

print('Привет, юный кодер')

elif (v < 30):

print('Здравствуйте, молодой человек')

elif (v < 65):

print('Добрый день. Как семья, дети?')

elif (v < 100):

print('Здорово, Михалыч. Пенсию уже дали?')

elif (v < 100000):

print('Клан бессмертных приветствует тебя!')



Введите 1 если погода солнечная, и 2 если пасмурная: 1

Нужно загорать

Введите логин: tsn

Введите пароль: 123

Ты хто такой, тавай дасвидания…

Введите сколько вам лет: 43

Добрый день. Как семья, дети?







2.2.1 Пример решения квадратного уравнения с защищенными блоками



# Пример решения квадратного уравнения

import math # Подключение математического модуля



try: # Защищенный блок 1

a = float(input("Введите A="))

b = float(input("Введите B="))

c = float(input("Введите C="))

try: # Защищенный блок 2

d = b * b – 4 * a * c

x1 = (-b + math.sqrt(d)) / (2 * a)

x2 = (-b – math.sqrt(d)) / (2 * a)

print('d = ', d)

print('x1 = ', round(x1, 2))

print("x2 = " + format(x2, "#.2f"))

except: # Обработчик ошибок для защищенного блока 1

print("Нет решения!")

except: # Обработчик ошибок для защищенного блока 2

print("Неверные входные данные!")

input("Нажмите Enter для выхода") # Задержка перед выходом из программы





Введите A=1

Введите B=2

Введите C=-33

d = 136.0

x1 = 4.83

x2 = -6.83

Нажмите Enter для выхода





2.2.2 Практический пример с условием



# Программа получает ввод чисел X A B, затем выводит значение Y согласно

# y = (10 * (x + a^2)) / (b + a) если x >= 4

# y = 5 * (x + a^2 + b) если x < 4



def main(): # основная функция

# Получаем ввод X A B используя raw_input. Так как данный оператор всегда

# возвращает тип str, преобразовываем его в int используя оператор int()

# В питоне не обязательно объявлять переменные заранее, можно их объявлять

# сразу же присваивая значение. Тип переменной интерпретатор определяет сам

a = int(input('Введите A: '))

b = int(input('Введите B: '))

x = int(input('Введите X: '))

if x >= 4:

y = (10 * (x + a ** 2)) / (b + a)

else:

y = 5 * (x + a ** 2 + b)

# В питоне ' и " равнозначны. Выводим результат на экран. %.1f выводит

# значение типа float с точностью до одной десятой

print("y = %.1f" % y)



# Следующее условие предотвращает запуск программы, если она была импортирована

# в качестве модуля (к примеру import lab1)

if __name__ == '__main__':

main() # вызов основной функции





Введите A: 1

Введите B: 2

Введите X: 3

y = 30.0








2.3 Тернарный условный оператор




a = 10

b = 20

maximum = a if a > b else b

minimum = a if a < b else b

print(minimum, maximum)



10 20






ЛЕКЦИЯ 3 – ОСНОВНЫЕ КОМПОНЕНТЫ PYQT5





3.1 QWidget и QDialog


Окно











self.setWindowTitle('Создание простейшей визуальной программы')

self.setWindowIcon(QtGui.QIcon('images/logo.png'))



class Main(QWidget) или class Main(QDialog)



app = QApplication(sys.argv)

window = Main()

window.show()

sys.exit(app.exec_())




3.2 QPushButton


Кнопка











def solve(self):



self.btn_solve.clicked.connect(self.solve)






3.3 QLabel


Текстовая метка











self.label_img.setPixmap(QPixmap('images/main.png'))

self.label_img.setScaledContents(True)

self.label_answer.setText('Ответ: ' + str(format(answer, '.12f')))

print (QtGui.QtextDocument(self.label_answer.text()).toPlainText())






3.4 QLineEdit


Текстовое поле для ввода/вывода











a = self.lineEdit_a.text()

self.lineEdit_a.setText('')




3.5 Практический пример




Вид при использовании QWidget








Вид при использовании QDialog








import sys



from PyQt5 import QtGui

from PyQt5.QtGui import QPixmap

from PyQt5.QtWidgets import *

from PyQt5.uic import loadUi





class Main(QDialog):

def __init__(self):

super(Main, self).__init__()

loadUi('uis/main.ui', self) # загрузка формы в py-скрипт



self.setWindowTitle('Создание простейшей визуальной '

'программы на Python')



self.setWindowIcon(QtGui.QIcon('images/logo.png'))

self.label_img.setPixmap(QPixmap('images/main.png'))

self.label_img.setScaledContents(True)



self.btn_solve.clicked.connect(self.solve) # Связь кнопки с методом

self.btn_clear.clicked.connect(self.clear) # Связь кнопки с методом

self.btn_exit.clicked.connect(self.exit) # Связь кнопки с методом



def solve(self):

a = self.lineEdit_a.text()

b = self.lineEdit_b.text()

x = self.lineEdit_x.text()

if validation_of_data(a, b, x):

a = float(a)

b = float(b)

x = float(x)



if x > 6:

answer = a / x + b / x ** 2

else:

answer = a ** 2 * (x + b)



self.label_answer.setText('Ответ: ' + str(format(answer, '.2f')))

else:

self.label_answer.setText(

'Ошибка!')



def clear(self):

self.lineEdit_a.setText('')

self.lineEdit_b.setText('')

self.lineEdit_x.setText('')

self.label_answer.setText('Ответ: ')



def exit(self):

self.close()





def validation_of_data(a, b, x):

"""

проверяем валидность наших данных, с помощью перехвата исключения

:param a: число, полученное из lineEdit_a

:param b: число, полученное из lineEdit_b

:param x: число, полученное из lineEdit_x

:return: True – прошло валидацию, False – нет

"""

try:

float(a)

float(b)

float(x)



return True

except Exception:

return False





def main():

# каждое приложение должно создать объект QApplication

# sys.argv – список аргументов командной строки

app = QApplication(sys.argv)

window = Main() # базовый класс для всех объектов интерфейса пользователя

window.show() # отобразить окно на экране

sys.exit(app.exec_()) # запуск основного цикла приложения





if __name__ == '__main__':

main()






3.6 Конвертация файла «ui» в скрипт Python


(PyQt5 UI code generator)



pyuic5 name.ui -o name.py

Запускаем из папки с файлом ui в cmd, после чего появляется “py” скрипт в той же папке.






ЛЕКЦИЯ 4 – СПИСКИ, СЛОВАРИ, ЦИКЛЫ И МАССИВЫ





4.1 Списки и кортежи


Список представляет собой упорядоченную последовательность элементов. Он очень гибкий и является одним из самых используемых типов в Python. Элементы списка не обязательно должны быть одного типа.

Объявить список довольно просто. Внутрь квадратных скобок помещаются элементы списка, разделённые запятой:



a = [67, 5, 90, 20, 30]

b = ['Маша', 'Ваня', 'Лена', 'Марина', 'Арнольд']

print(a)

print(b)

aa = a[:] # Автономная копия списка

aaa = list(a) # Автономная копия списка

aaaa = a.copy() # Автономная копия списка

aaa.reverse() # Сортировка списка в обратном порядке

print(a[0]) # Первый элемент 67

print(a[2]) # Третий элемент 90

print(b[1]) # второй элемент Ваня

b.append('Дима') # Добавление элемента в конец списка

print(b[-1]) # Печать последнего элемента Дима

a.sort() # Сортировка списка

print(a) # [5, 20, 30, 67, 90]

print(aa) # [67, 5, 90, 20, 30]

print(aaa) # [30, 20, 90, 5, 67]

print(aaaa) # [67, 5, 90, 20, 30]





[67, 5, 90, 20, 30]

['Маша', 'Ваня', 'Лена', 'Марина', 'Арнольд']

67

90

Ваня

Дима

[5, 20, 30, 67, 90]

[67, 5, 90, 20, 30]

[30, 20, 90, 5, 67]

[67, 5, 90, 20, 30]



Так же как и список, кортеж (tuple) является упорядоченной последовательностью элементов. Вся разница заключается в том, что кортежи неизменяемы. Кортежи используются для защиты данных от перезаписи и обычно работают быстрее, чем списки, т.к. их нельзя изменять.

Для создания кортежа нужно поместить внутрь круглых скобок элементы, разделённые запятой:



t = (5, 'program', 1 + 3j)

print("t[0] =", t[0])

print("t[1] =", t[1])

print("t[2] =", t[2])

for i in t:

print(i, end=" – ")



t[0] = 5

t[1] = program

t[2] = (1+3j)

5 – program – (1+3j) –





Списки имеют большой набор функций:

• append , extend – добавление;

• insert – вставка;

• index – найти индекс первого вхождения конкретного элемента;

• count – подсчет повторов элемента;

• remove , del – удаление элемента;

• sort – сортировка;

• reverse – реверс;

• pop – извлечение элемента;

• len – длина списка;

• max – максимальный элемент;

• min – минимальный элемент;

• оператор in – проверка элемента на вхождение.






4.2 Словари


Структура данных, позволяющая идентифицировать ее элементы не по числовому индексу, а по произвольному, называется словарем или ассоциативным массивом. Соответствующая структура данных в языке Python 3 называется dict.

Каждый элемент словаря состоит из двух объектов: ключа и значения. В примере ниже ключом является название страны, а значением является название столицы. Ключ идентифицирует элемент словаря, значение является данными, которые соответствуют данному ключу. Значения ключей – уникальны, двух одинаковых ключей в словаре быть не может.



# Создадим пустой словарь Capitals

Capitals = dict()



# Заполним его несколькими значениями

Capitals['Russia'] = 'Moscow'

Capitals['Ukraine'] = 'Kiev'

Capitals['USA'] = 'Washington'



Countries = ['Russia', 'France', 'USA', 'Russia']



for country in Countries:

# Для каждой страны из списка проверим, есть ли она в словаре Capitals

if country in Capitals:

print('Столица страны ' + country + ': ' + Capitals[country])

else:

print('В базе нет страны c названием ' + country)



Столица страны Russia: Moscow

В базе нет страны c названием France

Столица страны USA: Washington

Столица страны Russia: Moscow

Методы словарей:

• clear() – очищает словарь;

• copy() – возвращает копию словаря;

• fromkeys(seq[, value]) – создает словарь с ключами из seq и значением value (по умолчанию None);

• get(key[, default]) – возвращает значение ключа, но если его нет, не бросает исключение, а возвращает default (по умолчанию None);

• items() – возвращает пары (ключ, значение);

• keys() – возвращает ключи в словаре;

• pop(key[, default]) – удаляет ключ и возвращает значение. Если ключа нет, возвращает default (по умолчанию бросает исключение);

• popitem() – удаляет и возвращает пару (ключ, значение). Если словарь пуст, бросает исключение KeyError. Помните, что словари неупорядочены;

• setdefault(key[, default]) – возвращает значение ключа, но если его нет, не бросает исключение, а создает ключ с значением default (по умолчанию None);

• update([other]) – обновляет словарь, добавляя пары (ключ, значение) из other. Существующие ключи перезаписываются. Возвращает None (не новый словарь!);

• values() – возвращает значения в словаре.

Countries = {'Russia': 'Moscow', 'Ukraine': 'Kiev', 'USA': 'Washington', 'Kazakhstan': 'Astana'}



print(Countries)



key1 = 'USA'

key2 = 'us'

if key1 in Countries:

del Countries[key1]



try:

del Countries[key2]

except KeyError:

print('Нет элемента с ключом "' + key2 + '" в словаре')



print(Countries)



{'Ukraine': 'Kiev', 'Russia': 'Moscow', 'Kazakhstan': 'Astana', 'USA': 'Washington'}

Нет элемента с ключом "us" в словаре

{'Ukraine': 'Kiev', 'Russia': 'Moscow', 'Kazakhstan': 'Astana'}



# Преобразование списка-кортеджа в словарь

users = (

("+111123455", "Tom"),

("+384767557", "Bob"),

("+958758767", "Alice")

)

users_dict = dict(users)

print(users)

print(users_dict)



# получаем элемент с ключом "+111123455"

print(users_dict["+111123455"]) # Tom



# установка значения элемента с ключом "+384767557"

users_dict["+384767557"] = "Bob Smith"

print(users_dict["+384767557"]) # Bob Smith



(('+111123455', 'Tom'), ('+384767557', 'Bob'), ('+958758767', 'Alice'))

{'+958758767': 'Alice', '+384767557': 'Bob', '+111123455': 'Tom'}

Tom

Bob Smith



4.2.1 Сортировка словарей



# Пример подсчета одинаковых символов в текстовом файле с использованием словаря

my_dict = dict()



my_text = open(u'D:/text.txt', 'r').read()



for c in my_text:

if c in my_dict:

my_dict[c] = my_dict[c] + 1

else:

my_dict.update({c: 1})



for w in sorted(my_dict, key=my_dict.get, reverse=True):

print(w, my_dict[w])



L 9

o 9

f 8

p 8








4.3 Циклы




mas = ['Ленин', 'Сталин', 'Хрущёв', 'Брежнев', 'Горбачёв', 'Путин']

mas.append('Медведев')



for x in mas:

print('правил ' + x + ' а после него… ')



a = 1

while (a < 5):

print(a, "^ 2 =", a * a, ' ', a ** 2)

a = a + 1



print('Висит груша, нельзя скушать. Что это такое?')



s = ''

while ((s != 'Лампочка') and (s != 'лампочка')):

s = input('Введите ответ и нажмите Enter: ')



print('Вы отгадали загадку!')



правил Ленин а после него…

правил Сталин а после него…

правил Хрущёв а после него…

правил Брежнев а после него…

правил Горбачёв а после него…

правил Путин а после него…

правил Медведев а после него…

1 ^ 2 = 1 1

2 ^ 2 = 4 4

3 ^ 2 = 9 9

4 ^ 2 = 16 16

Висит груша, нельзя скушать. Что это такое?

Введите ответ и нажмите Enter: лампочка

Вы отгадали загадку!





print('Введите стих, отделяя строки нажатием Enter, последней строкой введите слово Конец')

while (True):

s = str(input())

if ((s == 'Конец') or (s == 'конец')):

break

k = 0

for x in s: # Перебор по буквам слова

if (x in 'аеёиоуыэюя'): # Проверка буквы на гласную

k = k + 1

print(k)

Это мой новый стих

5

Красивый и новый

6

Да

1

Конец





month = ["январь", "февраль", 'март', 'апрель']

print(month[0]) # январь

print(month[0:2]) # ['январь', 'февраль']

print('Как прекрасны месяцы', " и ".join(month), "!") # Как прекрасны месяцы январь и февраль и март и апрель !





Конец ознакомительного фрагмента. Получить полную версию книги.


Текст предоставлен ООО «ЛитРес».

Прочитайте эту книгу целиком, купив полную легальную версию (https://www.litres.ru/sergey-nikolaevich-talipov/programmirovanie-na-python3-s-pyqt5/) на ЛитРес.

Безопасно оплатить книгу можно банковской картой Visa, MasterCard, Maestro, со счета мобильного телефона, с платежного терминала, в салоне МТС или Связной, через PayPal, WebMoney, Яндекс.Деньги, QIWI Кошелек, бонусными картами или другим удобным Вам способом.



Если текст книги отсутствует, перейдите по ссылке

Возможные причины отсутствия книги:
1. Книга снята с продаж по просьбе правообладателя
2. Книга ещё не поступила в продажу и пока недоступна для чтения

Навигация